package com.zhike.mobileimsdk.server.processor;

import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.zhike.common.constant.Constants;
import com.zhike.mobileimsdk.server.utils.RedisIns;

/**
 * 在线用户管理
 */
public class OnlineUserManager {
    private static Logger logger = LoggerFactory.getLogger(OnlineUserManager.class);
    private static OnlineUserManager instance = null;

    public OnlineUserManager() {

    }

    public static OnlineUserManager getInstance() {
        if (instance == null) {
            synchronized (OnlineUserManager.class) {
                if (instance == null) {
                    instance = new OnlineUserManager();
                }
            }
        }
        return instance;
    }

    /**
     * 用户上线，将用户 ID 添加到 Redis 集合中
     * 
     * @param userId 用户 ID
     */
    public void userOnline(String userId) {
        RedisIns.getInstance().getRedisIns().sAdd(Constants.USER_ONLINE_LIST, userId);
    }

    /**
     * 用户下线，从 Redis 集合中移除用户 ID
     * 
     * @param userId 用户 ID
     */
    public void userOffline(String userId) {
        RedisIns.getInstance().getRedisIns().sRemove(Constants.USER_ONLINE_LIST, userId);
    }

    /**
     * 从节点服务 下线所有用户
     * 
     * @param nodeName 节点服务名
     */
    public void userOfflineFromServer(String nodeName) {
        int count = 0;
        for (String el : getOnlineUsers()) {
            if (el.contains(nodeName + "_")) {
                userOffline(el);
                count++;
            }
        }
        logger.info("共下线了用户:" + count);
    }

    /**
     * 获取在线用户列表
     * 
     * @return 在线用户 ID 集合
     */
    public Set<String> getOnlineUsers() {
        return RedisIns.getInstance().getRedisIns().sMembers(Constants.USER_ONLINE_LIST);
    }

    /**
     * 获取在线用户数量
     * 
     * @return
     */
    public Long getOnlineUsersCount() {
        return RedisIns.getInstance().getRedisIns().sSize(Constants.USER_ONLINE_LIST);
    }

}
